using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._DataManagementTools._Raster._RasterDataset
{
    /// <summary>
    /// <para>Copy Raster</para>
    /// <para>Saves a copy of a raster dataset or converts a mosaic dataset into a single raster dataset.</para>
    /// <para>保存栅格数据集的副本或将镶嵌数据集转换为单个栅格数据集。</para>
    /// </summary>    
    [DisplayName("Copy Raster")]
    public class CopyRaster : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public CopyRaster()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_in_raster">
        /// <para>Input Raster</para>
        /// <para>The raster dataset or mosaic dataset to be copied.</para>
        /// <para>要复制的栅格数据集或镶嵌数据集。</para>
        /// </param>
        /// <param name="_out_rasterdataset">
        /// <para>Output Raster Dataset</para>
        /// <para><xdoc>
        ///   <para>The name and format for the raster dataset being created.</para>
        ///   <bulletList>
        ///     <bullet_item>.bil—Esri BIL</bullet_item><para/>
        ///     <bullet_item>.bip—Esri BIP</bullet_item><para/>
        ///     <bullet_item>.bmp—BMP</bullet_item><para/>
        ///     <bullet_item>.bsq—Esri BSQ</bullet_item><para/>
        ///     <bullet_item>.dat—ENVI DAT</bullet_item><para/>
        ///     <bullet_item>.gif—GIF</bullet_item><para/>
        ///     <bullet_item>.img—ERDAS IMAGINE</bullet_item><para/>
        ///     <bullet_item>.jpg—JPEG</bullet_item><para/>
        ///     <bullet_item>.jp2—JPEG 2000</bullet_item><para/>
        ///     <bullet_item>.png—PNG</bullet_item><para/>
        ///     <bullet_item>.tif—TIFF</bullet_item><para/>
        ///     <bullet_item>.mrf—MRF</bullet_item><para/>
        ///     <bullet_item>.crf—CRF</bullet_item><para/>
        ///     <bullet_item>No extension for Esri Grid</bullet_item><para/>
        ///   </bulletList>
        ///   <para>When storing a raster dataset in a geodatabase, do not add a file extension to the name of the raster dataset.</para>
        ///   <para>When storing a raster dataset to a JPEG file, JPEG 2000 file, TIFF file, or geodatabase, you can specify a compression type and compression quality.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>正在创建的栅格数据集的名称和格式。</para>
        ///   <bulletList>
        ///     <bullet_item>.bil - Esri BIL</bullet_item><para/>
        ///     <bullet_item>.bip - Esri BIP</bullet_item><para/>
        ///     <bullet_item>.bmp—BMP</bullet_item><para/>
        ///     <bullet_item>.bsq—Esri BSQ</bullet_item><para/>
        ///     <bullet_item>.dat—ENVI DAT</bullet_item><para/>
        ///     <bullet_item>.gif—GIF</bullet_item><para/>
        ///     <bullet_item>.img—ERDAS 想象</bullet_item><para/>
        ///     <bullet_item>.jpg - JPEG</bullet_item><para/>
        ///     <bullet_item>.jp2 - JPEG 2000</bullet_item><para/>
        ///     <bullet_item>.png—PNG</bullet_item><para/>
        ///     <bullet_item>.tif—TIFF</bullet_item><para/>
        ///     <bullet_item>.mrf - MRF</bullet_item><para/>
        ///     <bullet_item>.crf - CRF</bullet_item><para/>
        ///     <bullet_item>没有 Esri Grid 的扩展模块</bullet_item><para/>
        ///   </bulletList>
        ///   <para>在地理数据库中存储栅格数据集时，请勿在栅格数据集的名称中添加文件扩展名。</para>
        ///   <para>将栅格数据集存储到 JPEG 文件、JPEG 2000 文件、TIFF 文件或地理数据库时，可以指定压缩类型和压缩质量。</para>
        /// </xdoc></para>
        /// </param>
        public CopyRaster(object _in_raster, object _out_rasterdataset)
        {
            this._in_raster = _in_raster;
            this._out_rasterdataset = _out_rasterdataset;
        }
        public override string ToolboxName => "Data Management Tools";

        public override string ToolName => "Copy Raster";

        public override string CallName => "management.CopyRaster";

        public override List<string> AcceptEnvironments => ["cellAlignment", "cellSize", "compression", "configKeyword", "extent", "geographicTransformations", "nodata", "outputCoordinateSystem", "parallelProcessingFactor", "pyramid", "rasterStatistics", "resamplingMethod", "scratchWorkspace", "snapRaster", "tileSize", "workspace"];

        public override object[] ParameterInfo => [_in_raster, _out_rasterdataset, _config_keyword, _background_value, _nodata_value, _onebit_to_eightbit.GetGPValue(), _colormap_to_RGB.GetGPValue(), _pixel_type.GetGPValue(), _scale_pixel_value.GetGPValue(), _RGB_to_Colormap.GetGPValue(), _format.GetGPValue(), _transform.GetGPValue(), _process_as_multidimensional.GetGPValue(), _build_multidimensional_transpose.GetGPValue()];

        /// <summary>
        /// <para>Input Raster</para>
        /// <para>The raster dataset or mosaic dataset to be copied.</para>
        /// <para>要复制的栅格数据集或镶嵌数据集。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Raster")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_raster { get; set; }


        /// <summary>
        /// <para>Output Raster Dataset</para>
        /// <para><xdoc>
        ///   <para>The name and format for the raster dataset being created.</para>
        ///   <bulletList>
        ///     <bullet_item>.bil—Esri BIL</bullet_item><para/>
        ///     <bullet_item>.bip—Esri BIP</bullet_item><para/>
        ///     <bullet_item>.bmp—BMP</bullet_item><para/>
        ///     <bullet_item>.bsq—Esri BSQ</bullet_item><para/>
        ///     <bullet_item>.dat—ENVI DAT</bullet_item><para/>
        ///     <bullet_item>.gif—GIF</bullet_item><para/>
        ///     <bullet_item>.img—ERDAS IMAGINE</bullet_item><para/>
        ///     <bullet_item>.jpg—JPEG</bullet_item><para/>
        ///     <bullet_item>.jp2—JPEG 2000</bullet_item><para/>
        ///     <bullet_item>.png—PNG</bullet_item><para/>
        ///     <bullet_item>.tif—TIFF</bullet_item><para/>
        ///     <bullet_item>.mrf—MRF</bullet_item><para/>
        ///     <bullet_item>.crf—CRF</bullet_item><para/>
        ///     <bullet_item>No extension for Esri Grid</bullet_item><para/>
        ///   </bulletList>
        ///   <para>When storing a raster dataset in a geodatabase, do not add a file extension to the name of the raster dataset.</para>
        ///   <para>When storing a raster dataset to a JPEG file, JPEG 2000 file, TIFF file, or geodatabase, you can specify a compression type and compression quality.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>正在创建的栅格数据集的名称和格式。</para>
        ///   <bulletList>
        ///     <bullet_item>.bil - Esri BIL</bullet_item><para/>
        ///     <bullet_item>.bip - Esri BIP</bullet_item><para/>
        ///     <bullet_item>.bmp—BMP</bullet_item><para/>
        ///     <bullet_item>.bsq—Esri BSQ</bullet_item><para/>
        ///     <bullet_item>.dat—ENVI DAT</bullet_item><para/>
        ///     <bullet_item>.gif—GIF</bullet_item><para/>
        ///     <bullet_item>.img—ERDAS 想象</bullet_item><para/>
        ///     <bullet_item>.jpg - JPEG</bullet_item><para/>
        ///     <bullet_item>.jp2 - JPEG 2000</bullet_item><para/>
        ///     <bullet_item>.png—PNG</bullet_item><para/>
        ///     <bullet_item>.tif—TIFF</bullet_item><para/>
        ///     <bullet_item>.mrf - MRF</bullet_item><para/>
        ///     <bullet_item>.crf - CRF</bullet_item><para/>
        ///     <bullet_item>没有 Esri Grid 的扩展模块</bullet_item><para/>
        ///   </bulletList>
        ///   <para>在地理数据库中存储栅格数据集时，请勿在栅格数据集的名称中添加文件扩展名。</para>
        ///   <para>将栅格数据集存储到 JPEG 文件、JPEG 2000 文件、TIFF 文件或地理数据库时，可以指定压缩类型和压缩质量。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Raster Dataset")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _out_rasterdataset { get; set; }


        /// <summary>
        /// <para>Configuration Keyword</para>
        /// <para>Specifies the storage parameters (configuration) for a geodatabase. Configuration keywords are set up by your database administrator.</para>
        /// <para>指定地理数据库的存储参数（配置）。配置关键字由数据库管理员设置。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Configuration Keyword")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _config_keyword { get; set; } = null;


        /// <summary>
        /// <para>Ignore Background Value</para>
        /// <para><xdoc>
        ///   <para>Remove the unwanted values created around the raster data. The value specified will be distinguished from other valuable data in the raster dataset. For example, a value of zero along the raster dataset's borders will be distinguished from zero values in the raster dataset.</para>
        ///   <para>The pixel value specified will be set to NoData in the output raster dataset.</para>
        ///   <para>For file-based rasters, Ignore Background Value must be set to the same value as NoData for the background value to be ignored. Enterprise and geodatabase rasters will work without this extra step.</para>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>移除在栅格数据周围创建的不需要的值。指定的值将与栅格数据集中的其他有价值数据区分开来。例如，栅格数据集边界上的零值将与栅格数据集中的零值区分开来。</para>
        ///   <para>在输出栅格数据集中，指定的像素值将设置为 NoData。</para>
        ///   <para>对于基于文件的栅格，必须将忽略背景值设置为与 NoData 相同的值，才能忽略背景值。企业级栅格和地理数据库栅格无需此额外步骤即可工作。</para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Ignore Background Value")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public double? _background_value { get; set; } = null;


        /// <summary>
        /// <para>NoData Value</para>
        /// <para>All the pixels with the specified value will be set to NoData in the output raster dataset.</para>
        /// <para>在输出栅格数据集中，所有具有指定值的像素都将设置为 NoData。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("NoData Value")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _nodata_value { get; set; } = null;


        /// <summary>
        /// <para>Convert 1 bit data to 8 bit</para>
        /// <para><xdoc>
        ///   <para>Choose whether the input 1-bit raster dataset will be converted to an 8-bit raster dataset. In this conversion, the value 1 in the input raster dataset will be changed to 255 in the output raster dataset. This is useful when importing a 1-bit raster dataset to a geodatabase. One-bit raster datasets have 8-bit pyramid layers when stored in a file system, but in a geodatabase, 1-bit raster datasets can only have 1-bit pyramid layers, which makes the display unpleasant. By converting the data to 8 bit in a geodatabase, the pyramid layers are built as 8 bit instead of 1 bit, resulting in a proper raster dataset in the display.</para>
        ///   <bulletList>
        ///     <bullet_item>Unchecked—No conversion will be done. This is the default.</bullet_item><para/>
        ///     <bullet_item>Checked—The input raster will be converted.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>选择是否将输入的 1 位栅格数据集转换为 8 位栅格数据集。在此转换中，输入栅格数据集中的值 1 将更改为输出栅格数据集中的值 255。在将 1 位栅格数据集导入地理数据库时，此功能非常有用。1 位栅格数据集在存储在文件系统中时具有 8 位金字塔图层，但在地理数据库中，1 位栅格数据集只能具有 1 位金字塔图层，这使得显示效果不愉快。通过在地理数据库中将数据转换为 8 位，金字塔图层将构建为 8 位而不是 1 位，从而在显示中生成适当的栅格数据集。</para>
        ///   <bulletList>
        ///     <bullet_item>未选中 - 不进行任何转换。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>选中 - 将转换输入栅格。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Convert 1 bit data to 8 bit")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _onebit_to_eightbit_value _onebit_to_eightbit { get; set; } = _onebit_to_eightbit_value._false;

        public enum _onebit_to_eightbit_value
        {
            /// <summary>
            /// <para>OneBitTo8Bit</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("OneBitTo8Bit")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NONE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NONE")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Colormap to RGB</para>
        /// <para><xdoc>
        ///   <para>If the input raster dataset has a color map, the output raster dataset can be converted to a three-band output raster dataset. This is useful when mosaicking rasters with different color maps.</para>
        ///   <bulletList>
        ///     <bullet_item>Unchecked—No conversion will occur. This is the default.</bullet_item><para/>
        ///     <bullet_item>Checked—The input dataset will be converted.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>如果输入栅格数据集具有颜色映射表，则输出栅格数据集可以转换为三波段输出栅格数据集。这在镶嵌具有不同颜色映射表的栅格时非常有用。</para>
        ///   <bulletList>
        ///     <bullet_item>未选中 - 不会发生任何转换。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>选中 - 将转换输入数据集。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Colormap to RGB")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _colormap_to_RGB_value _colormap_to_RGB { get; set; } = _colormap_to_RGB_value._false;

        public enum _colormap_to_RGB_value
        {
            /// <summary>
            /// <para>ColormapToRGB</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("ColormapToRGB")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NONE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NONE")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Pixel Type</para>
        /// <para><xdoc>
        ///   <para>Specifies the bit depth, or radiometric resolution, to use for the raster or mosaic dataset. If not defined, the value will be taken from the first raster dataset.</para>
        ///   <bulletList>
        ///     <bullet_item>1 bit—A 1-bit unsigned integer. The values can be 0 or 1.</bullet_item><para/>
        ///     <bullet_item>2 bit—A 2-bit unsigned integer. The values supported can be from 0 to 3.</bullet_item><para/>
        ///     <bullet_item>4 bit—A 4-bit unsigned integer. The values supported can be from 0 to 15.</bullet_item><para/>
        ///     <bullet_item>8 bit unsigned—An unsigned 8-bit data type. The values supported can be from 0 to 255.</bullet_item><para/>
        ///     <bullet_item>8 bit signed—A signed 8-bit data type. The values supported can be from -128 to 127.</bullet_item><para/>
        ///     <bullet_item>16 bit unsigned—A 16-bit unsigned data type. The values can range from 0 to 65,535.</bullet_item><para/>
        ///     <bullet_item>16 bit signed—A 16-bit signed data type. The values can range from -32,768 to 32,767.</bullet_item><para/>
        ///     <bullet_item>32 bit unsigned—A 32-bit unsigned data type. The values can range from 0 to 4,294,967,295.</bullet_item><para/>
        ///     <bullet_item>32 bit signed—A 32-bit signed data type. The values can range from -2,147,483,648 to 2,147,483,647.</bullet_item><para/>
        ///     <bullet_item>32 bit float—A 32-bit data type supporting decimals.</bullet_item><para/>
        ///     <bullet_item>64 bit—A 64-bit data type supporting decimals.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定用于栅格或镶嵌数据集的位深度或辐射分辨率。如果未定义，则该值将从第一个栅格数据集中获取。</para>
        ///   <bulletList>
        ///     <bullet_item>1 位 - 1 位无符号整数。这些值可以是 0 或 1。</bullet_item><para/>
        ///     <bullet_item>2 位 - 2 位无符号整数。支持的值可以是 0 到 3。</bullet_item><para/>
        ///     <bullet_item>4 位 - 4 位无符号整数。支持的值可以介于 0 到 15 之间。</bullet_item><para/>
        ///     <bullet_item>8 位无符号 - 无符号的 8 位数据类型。支持的值可以介于 0 到 255 之间。</bullet_item><para/>
        ///     <bullet_item>8 位有符号 - 有符号的 8 位数据类型。支持的值可以介于 -128 到 127 之间。</bullet_item><para/>
        ///     <bullet_item>16 位无符号 - 16 位无符号数据类型。这些值的范围可以从 0 到 65,535。</bullet_item><para/>
        ///     <bullet_item>16 位有符号 - 16 位有符号数据类型。这些值的范围可以从 -32,768 到 32,767。</bullet_item><para/>
        ///     <bullet_item>32 位无符号 - 32 位无符号数据类型。这些值的范围可以从 0 到 4,294,967,295。</bullet_item><para/>
        ///     <bullet_item>32 位有符号 - 32 位有符号数据类型。这些值的范围可以从 -2,147,483,648 到 2,147,483,647。</bullet_item><para/>
        ///     <bullet_item>32 位浮点数 - 支持小数的 32 位数据类型。</bullet_item><para/>
        ///     <bullet_item>64 位 - 支持小数的 64 位数据类型。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Pixel Type")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _pixel_type_value? _pixel_type { get; set; } = null;

        public enum _pixel_type_value
        {
            /// <summary>
            /// <para>1 bit</para>
            /// <para>1 bit—A 1-bit unsigned integer. The values can be 0 or 1.</para>
            /// <para>1 位 - 1 位无符号整数。这些值可以是 0 或 1。</para>
            /// </summary>
            [Description("1 bit")]
            [GPEnumValue("1_BIT")]
            _1_BIT,

            /// <summary>
            /// <para>2 bit</para>
            /// <para>2 bit—A 2-bit unsigned integer. The values supported can be from 0 to 3.</para>
            /// <para>2 位 - 2 位无符号整数。支持的值可以是 0 到 3。</para>
            /// </summary>
            [Description("2 bit")]
            [GPEnumValue("2_BIT")]
            _2_BIT,

            /// <summary>
            /// <para>4 bit</para>
            /// <para>4 bit—A 4-bit unsigned integer. The values supported can be from 0 to 15.</para>
            /// <para>4 位 - 4 位无符号整数。支持的值可以介于 0 到 15 之间。</para>
            /// </summary>
            [Description("4 bit")]
            [GPEnumValue("4_BIT")]
            _4_BIT,

            /// <summary>
            /// <para>8 bit unsigned</para>
            /// <para>8 bit unsigned—An unsigned 8-bit data type. The values supported can be from 0 to 255.</para>
            /// <para>8 位无符号 - 无符号的 8 位数据类型。支持的值可以介于 0 到 255 之间。</para>
            /// </summary>
            [Description("8 bit unsigned")]
            [GPEnumValue("8_BIT_UNSIGNED")]
            _8_BIT_UNSIGNED,

            /// <summary>
            /// <para>8 bit signed</para>
            /// <para>8 bit signed—A signed 8-bit data type. The values supported can be from -128 to 127.</para>
            /// <para>8 位有符号 - 有符号的 8 位数据类型。支持的值可以介于 -128 到 127 之间。</para>
            /// </summary>
            [Description("8 bit signed")]
            [GPEnumValue("8_BIT_SIGNED")]
            _8_BIT_SIGNED,

            /// <summary>
            /// <para>16 bit unsigned</para>
            /// <para>16 bit unsigned—A 16-bit unsigned data type. The values can range from 0 to 65,535.</para>
            /// <para>16 位无符号 - 16 位无符号数据类型。这些值的范围可以从 0 到 65,535。</para>
            /// </summary>
            [Description("16 bit unsigned")]
            [GPEnumValue("16_BIT_UNSIGNED")]
            _16_BIT_UNSIGNED,

            /// <summary>
            /// <para>16 bit signed</para>
            /// <para>16 bit signed—A 16-bit signed data type. The values can range from -32,768 to 32,767.</para>
            /// <para>16 位有符号 - 16 位有符号数据类型。这些值的范围可以从 -32,768 到 32,767。</para>
            /// </summary>
            [Description("16 bit signed")]
            [GPEnumValue("16_BIT_SIGNED")]
            _16_BIT_SIGNED,

            /// <summary>
            /// <para>32 bit unsigned</para>
            /// <para>32 bit unsigned—A 32-bit unsigned data type. The values can range from 0 to 4,294,967,295.</para>
            /// <para>32 位无符号 - 32 位无符号数据类型。这些值的范围可以从 0 到 4,294,967,295。</para>
            /// </summary>
            [Description("32 bit unsigned")]
            [GPEnumValue("32_BIT_UNSIGNED")]
            _32_BIT_UNSIGNED,

            /// <summary>
            /// <para>32 bit signed</para>
            /// <para>32 bit signed—A 32-bit signed data type. The values can range from -2,147,483,648 to 2,147,483,647.</para>
            /// <para>32 位有符号 - 32 位有符号数据类型。这些值的范围可以从 -2,147,483,648 到 2,147,483,647。</para>
            /// </summary>
            [Description("32 bit signed")]
            [GPEnumValue("32_BIT_SIGNED")]
            _32_BIT_SIGNED,

            /// <summary>
            /// <para>32 bit float</para>
            /// <para>32 bit float—A 32-bit data type supporting decimals.</para>
            /// <para>32 位浮点数 - 支持小数的 32 位数据类型。</para>
            /// </summary>
            [Description("32 bit float")]
            [GPEnumValue("32_BIT_FLOAT")]
            _32_BIT_FLOAT,

            /// <summary>
            /// <para>64 bit</para>
            /// <para>64 bit—A 64-bit data type supporting decimals.</para>
            /// <para>64 位 - 支持小数的 64 位数据类型。</para>
            /// </summary>
            [Description("64 bit")]
            [GPEnumValue("64_BIT")]
            _64_BIT,

        }

        /// <summary>
        /// <para>Scale Pixel Value</para>
        /// <para><xdoc>
        ///   <para>Specifies whether pixel values will be scaled. When the output is a pixel type other than the input (such as 16 bit to 8 bit), you can scale the values to fit into the new range; otherwise, the values that do not fit into the new pixel range will be discarded.</para>
        ///   <para>If scaling up, such as 8 bit to 16 bit, the minimum and maximum of the 8-bit values will be scaled to the minimum and maximum in the 16-bit range. If scaling down, such as 16 bit to 8 bit, the minimum and maximum of the 16-bit values will be scaled to the minimum and maximum in the 8-bit range.</para>
        ///   <bulletList>
        ///     <bullet_item>Unchecked—The pixel values will remain the same and will not be scaled. Any values that do not fit within the value range will be discarded. This is the default.</bullet_item><para/>
        ///     <bullet_item>Checked—The pixel values will be scaled to the new pixel type. When you scale the pixel depth, your raster will display the same, but the values will be scaled to the new bit depth that was specified.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否缩放像素值。当输出是输入以外的像素类型（例如 16 位到 8 位）时，您可以缩放值以适应新范围;否则，不适合新像素范围的值将被丢弃。</para>
        ///   <para>如果纵向扩展（例如 8 位到 16 位），则 8 位值的最小值和最大值将缩放到 16 位范围内的最小值和最大值。如果缩减（例如 16 位到 8 位），则 16 位值的最小值和最大值将缩放到 8 位范围内的最小值和最大值。</para>
        ///   <bulletList>
        ///     <bullet_item>未选中 - 像素值将保持不变，并且不会缩放。任何不符合值范围的值都将被丢弃。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>选中 - 像素值将缩放为新的像素类型。缩放像素深度时，栅格将显示相同的内容，但值将缩放为指定的新位深度。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Scale Pixel Value")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _scale_pixel_value_value _scale_pixel_value { get; set; } = _scale_pixel_value_value._false;

        public enum _scale_pixel_value_value
        {
            /// <summary>
            /// <para>ScalePixelValue</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("ScalePixelValue")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NONE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NONE")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>RGB To Colormap</para>
        /// <para><xdoc>
        ///   <para>Specifies whether an 8-bit, 3-band (RGB) raster dataset will be converted to a single-band raster dataset with a color map. This operation suppresses noise that is often found in scanned images and is ideal for screen captures, scanned maps, or scanned documents. This is not recommended for satellite or aerial imagery or thematic raster data.</para>
        ///   <bulletList>
        ///     <bullet_item>Unchecked—The RGB raster dataset will not be converted.</bullet_item><para/>
        ///     <bullet_item>Checked—The RGB raster dataset will be converted to a color map.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否将 8 位 3 波段 （RGB） 栅格数据集转换为具有颜色映射表的单波段栅格数据集。此操作可抑制扫描图像中常见的噪点，非常适合屏幕捕获、扫描地图或扫描文档。不建议对卫星或航空影像或专题栅格数据执行此操作。</para>
        ///   <bulletList>
        ///     <bullet_item>未选中 - 不会转换 RGB 栅格数据集。</bullet_item><para/>
        ///     <bullet_item>选中 - RGB 栅格数据集将转换为颜色映射表。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("RGB To Colormap")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _RGB_to_Colormap_value _RGB_to_Colormap { get; set; } = _RGB_to_Colormap_value._false;

        public enum _RGB_to_Colormap_value
        {
            /// <summary>
            /// <para>RGBToColormap</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("RGBToColormap")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NONE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NONE")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Format</para>
        /// <para><xdoc>
        ///   <para>Specifies the output raster format.</para>
        ///   <bulletList>
        ///     <bullet_item>TIFF format—The output format will be TIFF.</bullet_item><para/>
        ///     <bullet_item>Cloud Optimized GeoTIFF—The output format will be Cloud Optimized GeoTIFF.</bullet_item><para/>
        ///     <bullet_item>ERDAS IMAGINE format—The output format will be ERDAS IMAGINE.</bullet_item><para/>
        ///     <bullet_item>BMP format—The output format will e BMP.</bullet_item><para/>
        ///     <bullet_item>GIF format—The output format will be GIF.</bullet_item><para/>
        ///     <bullet_item>PNG format—The output format will be PNG.</bullet_item><para/>
        ///     <bullet_item>JPEG format—The output format will be JPEG.</bullet_item><para/>
        ///     <bullet_item>JPEG 2000 format—The output format will be JPEG 2000.</bullet_item><para/>
        ///     <bullet_item>Esri Grid format—The output format will be Esri Grid.</bullet_item><para/>
        ///     <bullet_item>Esri BIL format—The output format will be Esri BIL.</bullet_item><para/>
        ///     <bullet_item>Esri BSQ format—The output format will be Esri BSQ.</bullet_item><para/>
        ///     <bullet_item>Esri BIP format—The output format will be Esri BIP.</bullet_item><para/>
        ///     <bullet_item>ENVI DAT format—The output format will be ENVI.</bullet_item><para/>
        ///     <bullet_item>Cloud raster format—The output format will be CRF.</bullet_item><para/>
        ///     <bullet_item>Meta raster format—The output format will be MRF.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定输出栅格格式。</para>
        ///   <bulletList>
        ///     <bullet_item>TIFF 格式—输出格式将为 TIFF。</bullet_item><para/>
        ///     <bullet_item>云优化 GeoTIFF—输出格式将为云优化 GeoTIFF。</bullet_item><para/>
        ///     <bullet_item>ERDAS IMAGINE 格式—输出格式将为 ERDAS IMAGINE。</bullet_item><para/>
        ///     <bullet_item>BMP 格式—输出格式将 e BMP。</bullet_item><para/>
        ///     <bullet_item>GIF 格式—输出格式将为 GIF。</bullet_item><para/>
        ///     <bullet_item>PNG 格式—输出格式将为 PNG。</bullet_item><para/>
        ///     <bullet_item>JPEG 格式 - 输出格式将为 JPEG。</bullet_item><para/>
        ///     <bullet_item>JPEG 2000 格式 - 输出格式将为 JPEG 2000。</bullet_item><para/>
        ///     <bullet_item>Esri Grid 格式 - 输出格式将为 Esri Grid。</bullet_item><para/>
        ///     <bullet_item>Esri BIL 格式 - 输出格式将为 Esri BIL。</bullet_item><para/>
        ///     <bullet_item>Esri BSQ 格式 - 输出格式将为 Esri BSQ。</bullet_item><para/>
        ///     <bullet_item>Esri BIP 格式 - 输出格式将为 Esri BIP。</bullet_item><para/>
        ///     <bullet_item>ENVI DAT 格式—输出格式将为 ENVI。</bullet_item><para/>
        ///     <bullet_item>云栅格格式 - 输出格式将为 CRF。</bullet_item><para/>
        ///     <bullet_item>元栅格格式—输出格式将为 MRF。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Format")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _format_value? _format { get; set; } = null;

        public enum _format_value
        {
            /// <summary>
            /// <para>TIFF format</para>
            /// <para>TIFF format—The output format will be TIFF.</para>
            /// <para>TIFF 格式—输出格式将为 TIFF。</para>
            /// </summary>
            [Description("TIFF format")]
            [GPEnumValue("TIFF")]
            _TIFF,

            /// <summary>
            /// <para>Cloud Optimized GeoTIFF</para>
            /// <para>Cloud Optimized GeoTIFF—The output format will be Cloud Optimized GeoTIFF.</para>
            /// <para>云优化 GeoTIFF—输出格式将为云优化 GeoTIFF。</para>
            /// </summary>
            [Description("Cloud Optimized GeoTIFF")]
            [GPEnumValue("COG")]
            _COG,

            /// <summary>
            /// <para>ERDAS IMAGINE format</para>
            /// <para>ERDAS IMAGINE format—The output format will be ERDAS IMAGINE.</para>
            /// <para>ERDAS IMAGINE 格式—输出格式将为 ERDAS IMAGINE。</para>
            /// </summary>
            [Description("ERDAS IMAGINE format")]
            [GPEnumValue("IMAGINE Image")]
            _IMAGINE_Image,

            /// <summary>
            /// <para>BMP format</para>
            /// <para>BMP format—The output format will e BMP.</para>
            /// <para>BMP 格式—输出格式将 e BMP。</para>
            /// </summary>
            [Description("BMP format")]
            [GPEnumValue("BMP")]
            _BMP,

            /// <summary>
            /// <para>GIF format</para>
            /// <para>GIF format—The output format will be GIF.</para>
            /// <para>GIF 格式—输出格式将为 GIF。</para>
            /// </summary>
            [Description("GIF format")]
            [GPEnumValue("GIF")]
            _GIF,

            /// <summary>
            /// <para>PNG format</para>
            /// <para>PNG format—The output format will be PNG.</para>
            /// <para>PNG 格式—输出格式将为 PNG。</para>
            /// </summary>
            [Description("PNG format")]
            [GPEnumValue("PNG")]
            _PNG,

            /// <summary>
            /// <para>JPEG format</para>
            /// <para>JPEG format—The output format will be JPEG.</para>
            /// <para>JPEG 格式 - 输出格式将为 JPEG。</para>
            /// </summary>
            [Description("JPEG format")]
            [GPEnumValue("JPEG")]
            _JPEG,

            /// <summary>
            /// <para>JPEG 2000 format</para>
            /// <para>JPEG 2000 format—The output format will be JPEG 2000.</para>
            /// <para>JPEG 2000 格式 - 输出格式将为 JPEG 2000。</para>
            /// </summary>
            [Description("JPEG 2000 format")]
            [GPEnumValue("JP2")]
            _JP2,

            /// <summary>
            /// <para>Esri Grid format</para>
            /// <para>Esri Grid format—The output format will be Esri Grid.</para>
            /// <para>Esri Grid 格式 - 输出格式将为 Esri Grid。</para>
            /// </summary>
            [Description("Esri Grid format")]
            [GPEnumValue("GRID")]
            _GRID,

            /// <summary>
            /// <para>Esri BIL format</para>
            /// <para>Esri BIL format—The output format will be Esri BIL.</para>
            /// <para>Esri BIL 格式 - 输出格式将为 Esri BIL。</para>
            /// </summary>
            [Description("Esri BIL format")]
            [GPEnumValue("BIL")]
            _BIL,

            /// <summary>
            /// <para>Esri BSQ format</para>
            /// <para>Esri BSQ format—The output format will be Esri BSQ.</para>
            /// <para>Esri BSQ 格式 - 输出格式将为 Esri BSQ。</para>
            /// </summary>
            [Description("Esri BSQ format")]
            [GPEnumValue("BSQ")]
            _BSQ,

            /// <summary>
            /// <para>Esri BIP format</para>
            /// <para>Esri BIP format—The output format will be Esri BIP.</para>
            /// <para>Esri BIP 格式 - 输出格式将为 Esri BIP。</para>
            /// </summary>
            [Description("Esri BIP format")]
            [GPEnumValue("BIP")]
            _BIP,

            /// <summary>
            /// <para>ENVI DAT format</para>
            /// <para>ENVI DAT format—The output format will be ENVI.</para>
            /// <para>ENVI DAT 格式—输出格式将为 ENVI。</para>
            /// </summary>
            [Description("ENVI DAT format")]
            [GPEnumValue("ENVI")]
            _ENVI,

            /// <summary>
            /// <para>Cloud raster format</para>
            /// <para>Cloud raster format—The output format will be CRF.</para>
            /// <para>云栅格格式 - 输出格式将为 CRF。</para>
            /// </summary>
            [Description("Cloud raster format")]
            [GPEnumValue("CRF")]
            _CRF,

            /// <summary>
            /// <para>Meta raster format</para>
            /// <para>Meta raster format—The output format will be MRF.</para>
            /// <para>元栅格格式—输出格式将为 MRF。</para>
            /// </summary>
            [Description("Meta raster format")]
            [GPEnumValue("MRF")]
            _MRF,

            /// <summary>
            /// <para>NetCDF</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NetCDF")]
            [GPEnumValue("NetCDF")]
            _NetCDF,

        }

        /// <summary>
        /// <para>Apply Transformation</para>
        /// <para><xdoc>
        ///   <para>Specifies whether a transformation associated with the input raster will be applied to the output. The input raster can have a transformation associated with it that is not saved in the input, such as a world file or a geometric function.
        ///   <bulletList>
        ///     <bullet_item>Unchecked—No associated transformation will be applied to the output.  </bullet_item><para/>
        ///     <bullet_item>Checked—Any associated transformation will be applied to the output.  </bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para><xdoc>
        /// <para>指定是否将与输入栅格关联的变换应用于输出。输入栅格可以具有与其关联的未保存在输入中的变换，例如坐标定位文件或几何函数。
        ///   <bulletList>
        ///     <bullet_item>未选中 - 不会对输出应用任何关联的变换。</bullet_item><para/>
        ///     <bullet_item>选中 - 任何关联的变换都将应用于输出。</bullet_item><para/>
        ///   </bulletList>
        ///   </para>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Apply Transformation")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _transform_value _transform { get; set; } = _transform_value._false;

        public enum _transform_value
        {
            /// <summary>
            /// <para>Transform</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("Transform")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NONE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NONE")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Process as Multidimensional</para>
        /// <para><xdoc>
        ///   <para>Specifies whether to process the input mosaic dataset as a multidimensional raster dataset.</para>
        ///   <bulletList>
        ///     <bullet_item>Unchecked—The input will not be processed as a multidimensional raster dataset. If the input is multidimensional, only the slice that is currently displayed will be processed. This is the default.</bullet_item><para/>
        ///     <bullet_item>Checked—The input will be processed as a multidimensional raster dataset and all slices will be processed to produce a new multidimensional raster dataset. The output Format must be set to Cloud raster format to use this option.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否将输入镶嵌数据集作为多维栅格数据集进行处理。</para>
        ///   <bulletList>
        ///     <bullet_item>未选中 - 输入不会作为多维栅格数据集进行处理。如果输入是多维的，则仅处理当前显示的切片。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>选中—输入将作为多维栅格数据集进行处理，并将对所有切片进行处理以生成新的多维栅格数据集。必须将输出格式设置为云栅格格式才能使用此选项。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Process as Multidimensional")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _process_as_multidimensional_value _process_as_multidimensional { get; set; } = _process_as_multidimensional_value._false;

        public enum _process_as_multidimensional_value
        {
            /// <summary>
            /// <para>ALL_SLICES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("ALL_SLICES")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>CURRENT_SLICE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("CURRENT_SLICE")]
            [GPEnumValue("false")]
            _false,

        }

        /// <summary>
        /// <para>Build Multidimensional Transpose</para>
        /// <para><xdoc>
        ///   <para>Specifies whether to build the transpose for the input multidimensional raster dataset to optimize data access. The transpose will chunk the multidimensional data along each dimension to optimize performance when accessing pixel values across all slices.</para>
        ///   <bulletList>
        ///     <bullet_item>Unchecked—No transpose will be built. This is the default.</bullet_item><para/>
        ///     <bullet_item>Checked—The input multidimensional raster dataset will be transposed. Process as multidimensional must be checked on to use this option.</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para><xdoc>
        ///   <para>指定是否为输入多维栅格数据集构建转置以优化数据访问。转置将沿每个维度对多维数据进行分块，以优化访问所有切片中的像素值时的性能。</para>
        ///   <bulletList>
        ///     <bullet_item>未选中 - 将不生成转置。这是默认设置。</bullet_item><para/>
        ///     <bullet_item>选中 - 输入多维栅格数据集将被转置。必须选中多维进程才能使用此选项。</bullet_item><para/>
        ///   </bulletList>
        /// </xdoc></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Build Multidimensional Transpose")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public _build_multidimensional_transpose_value _build_multidimensional_transpose { get; set; } = _build_multidimensional_transpose_value._false;

        public enum _build_multidimensional_transpose_value
        {
            /// <summary>
            /// <para>TRANSPOSE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("TRANSPOSE")]
            [GPEnumValue("true")]
            _true,

            /// <summary>
            /// <para>NO_TRANSPOSE</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("NO_TRANSPOSE")]
            [GPEnumValue("false")]
            _false,

        }

        public CopyRaster SetEnv(object cellSize = null, object compression = null, object configKeyword = null, object extent = null, object geographicTransformations = null, object nodata = null, object outputCoordinateSystem = null, object parallelProcessingFactor = null, object pyramid = null, object rasterStatistics = null, object resamplingMethod = null, object scratchWorkspace = null, object snapRaster = null, double[] tileSize = null, object workspace = null)
        {
            base.SetEnv(cellSize: cellSize, compression: compression, configKeyword: configKeyword, extent: extent, geographicTransformations: geographicTransformations, nodata: nodata, outputCoordinateSystem: outputCoordinateSystem, parallelProcessingFactor: parallelProcessingFactor, pyramid: pyramid, rasterStatistics: rasterStatistics, resamplingMethod: resamplingMethod, scratchWorkspace: scratchWorkspace, snapRaster: snapRaster, tileSize: tileSize, workspace: workspace);
            return this;
        }

    }

}